//编写一个算法来判断一个数是不是“快乐数”。 
//
// 一个“快乐数”定义为：对于一个正整数，每一次将该数替换为它每个位置上的数字的平方和，
// 然后重复这个过程直到这个数变为 1，也可能是无限循环但始终变不到 1。如果可以变为 1，那么这个数就是快乐数。
//
// 示例: 
//
// 输入: 19
//输出: true
//解释:
//1^2 + 9^2 = 82
//82 + 22 = 68
//62 + 82 = 100
//1^2 + 0^2 + 0^2 = 1
// 
//

class Solution {
    fun isHappy(n: Int): Boolean {
        //解法1：用set记录每一次生成的数，有重复的说明循环，不是快乐数
        //解法2：有个结论，有数字4则一定是循环
        var result = 0
        var loopN = n;
        while (loopN > 0) {
            val position = loopN % 10
            result += position * position
            loopN /= 10
        }

        when (result) {
            1 -> return true
            4 -> return false
            else -> return isHappy(result)
        }
    }
}